% Lecture <http://code.google.com/p/texsky/>
% Copyright (C) 2009  xiaogaozi <gaochangjian@gmail.com>
% 
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% 
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
% 
% You should have received a copy of the GNU General Public License
% along with this program.  If not, see <http://www.gnu.org/licenses/>.

\documentclass[adobefonts]{ctexart}

\CTEXoptions[captiondelimiter={\quad}]

\usepackage{amsmath}            % AMS的数学宏包
\usepackage{amssymb}            % AMS的数学符号宏包
\usepackage{graphicx}           % 插入图片需要的宏包
\usepackage{float}              % 强大的浮动环境控制宏包
\usepackage{framed}             % `shaded'环境需要用到
\usepackage{enumitem}           % 增强列表功能

\usepackage{shortvrb}           % 简化\verb的写法
\MakeShortVerb{\|}

\usepackage{color}              % 可以定义各种颜色
\usepackage[x11names]{xcolor}   % 下面的RoyalBlue3颜色需要用到的宏包
% 自定义的几种颜色
\definecolor{shadecolor}{gray}{0.85}
% \definecolor{darkblue}{rgb}{52,101,164}
% \definecolor{darkgreen}{rgb}{78,154,6}

% % 设置背景颜色
% \definecolor{bisque}{rgb}{.996,.891,.755}
% \pagecolor{bisque}

\usepackage[pdfauthor={高昌健},
            pdftitle={Lecture for "Linux--The Road to Hacker"},
            colorlinks=true,
            urlcolor=blue,
            linkcolor=RoyalBlue3]{hyperref} % 为超链接设置颜色, 修改PDF文件信息

\title{\textbf{Lecture for \texttt{"}Linux---The Road to Hacker\texttt{"}}}
\author{高昌健}

\usepackage[pagestyles]{titlesec} % 定制页眉页脚
% % 设置页眉页脚
% \newpagestyle{main}{%
%   \sethead[$\cdot$~\thepage~$\cdot$][][\thesection\quad%
%   \sectiontitle]{\thesection\quad\sectiontitle}{}{%
%   $\cdot$~\thepage~$\cdot$}
%   \setfoot{}{}{}\headrule}
% \pagestyle{main}
% \renewpagestyle{plain}{\sethead{}{}{}\setfoot{}{}{}}
\pagestyle{plain}

\usepackage[top=1in,bottom=1in,left=1.25in,right=1.25in]{geometry} % 设置页边距

\setlength{\belowcaptionskip}{1em} % 设置caption之后的距离

% XeTeX logo
\def\XeTeX{\leavevmode
\setbox0=\hbox{X\lower.5ex\hbox{\kern-.15em\reflectbox{E}}\kern-.1667em
\TeX}%
\dp0=0pt\ht0=0pt\box0}

% For LaN
\newcommand{\LaN}{L{\scriptsize\hspace{-0.47em}\raisebox{0.23em}{A}}\hspace{-0.1em}N}

\begin{document}

\maketitle

大家好，我叫高昌健，来自三叶草桃源小组。今天我们的主题是“Linux——通往黑客之路”。

主要分为这几个环节。首先是介绍关于Linux与黑客的文化和历史故事，接着我会对Linux和Windows做一些比较，然后是“简明黑客指南”，最后介绍一下Linux在我们学校的发展情况。

\section{文化与历史}
先来看一下“文化与历史”。\textbf{不过我想先问大家一个问题，不知道在你们心中，黑客是什么样子？$\heartsuit$}

OK，恐怕大多数人都会认为黑客是那种喜欢随意攻击别人，四处散播病毒的人，其实他们不是黑客，他们真正的名字叫做Cracker——“骇客”。下面让我们来看一下什么是骇客。

Who is Cracker? 骇客通常技术一般，当然他们肯定还是有一点技术的。同时他们最喜欢干的一件事情就是到处炫耀，恨不得让所有人知道他攻击了谁。这样的行为是很幼稚的，而且毫无责任感可言。他们已经违背了真正的黑客的道德准则，请记住，Cracker is NOT Hacker. 骇客不值得尊敬，只有真正的黑客才能。

那什么才是真正的黑客呢？从广义的角度上来讲，黑客是指那些对于某一领域具有强烈好奇心与求知欲的人，他们肯于在这个领域钻研，他们精通这个领域的知识。他们崇尚自由，不受约束，虽然如此，他们不会利用自己的知识来干坏事，即使干了会让自己很出名，但作为一名黑客，是绝对不能干那些只有骇客才干的事情。从刚才的解释来看，其实不仅仅是计算机领域的人可以被叫做黑客，黑客的概念可以衍生到任何领域。你可以把一个弹钢琴弹得登峰造极的人叫做钢琴黑客，不过他们还是喜欢被叫做钢琴家多一点。今天我们在这里讲的主要是指软件领域的黑客，也就是编程方面的。软件黑客除了具备刚才讲的特点以外，他们还精通编程语言，具有很强的编程能力，并且喜欢探寻计算机的本质。

那Linux和黑客之间又有什么关系呢？让我们来了解一下Linux的历史。要了解Linux，得首先了解Unix。\textbf{我想请问一下大家，你们知道除了Windows、Linux以外的另一个流行的桌面操作系统是什么吗？那你猜猜这三个操作系统里面有哪些和Unix有关？$\heartsuit$}

OK，谢谢这位同学。世界三大桌面操作系统有两个都是基于Unix开发的，这足以说明Unix的强大。让我们来全面了解一下Unix吧。我将Unix称作一个时代的传奇。它的主要开发者为Ken Thompson和Dennis Ritchie，这两位都是贝尔实验室的大牛。1969年，Unix横空出世，这来自于Ken Thompson在一个月内完成的壮举。这是一个很有趣的故事，话说1969年，Ken Thompson的妻子带着他们的孩子回老家去玩，把Ken Thompson同学一个人丢在了家里，Ken Thompson就寂寞了啊，于是他决定写一个操作系统，反正以前那个也用着不爽。第一个星期他写了一个操作系统的内核出来，第二个星期他写了一个shell，也就是用来和操作系统打交道的软件，第三个星期他写了一个编辑器出来，第四个星期他写了一个汇编器，可以把汇编代码转换成机器代码。就这样过了一个月，Ken Thompson同学把Unix最初的原型写了出来，全部使用汇编语言。1973年，Ken Thompson和Dennis Ritchie共同用C语言重写了Unix，这在当时来说也是一个很大胆的行为，因为在那个时代人们普遍认为像操作系统这种极度讲究时间性能的软件是只能用汇编来编写的，但Ken Thompson和Dennis Ritchie证明了C语言也行。值得注意的是，Dennis Ritchie同时也是C语言之父。有一本著名的C语言书籍被叫做“K\&R”，其中的R就代表Dennis Ritchie。之后Unix影响着一代又一代操作系统的发展，比如BSD，Sun的Solaris，HP的HP-UX，IBM的AIX，Linux，以及Mac OS。

这就是Ken Thompson和Dennis Ritchie两位大牛的帅照。

随着Unix的不断发展，Unix成为了标准的商业软件，就像现在的Windows一样，使用之前都需要向供应商支付一定的费用。有一个人觉得这样很不利于软件的发展，于是他决定写一个类似于Unix，但又完全免费，可以让用户自由使用的操作系统，这个人叫Richard Stallman，1983年他发起了名为GNU的计划。GNU旨在创造完全自由，free的操作系统，GNU是GNU's Not Unix的递归缩写。在发起GNU计划之后，Richard Stallman就开始编写操作系统的很多工具软件，这些软件成为了一件件杰作保留到现在。比如Emacs，一个非常强大的编辑器，这个后面我们还会讲到，GCC是一个编译器，GDB是调试器。

前面我说过，GNU最初的计划是创造一个类似于Unix的操作系统，到1992年的时候，GNU已经完成了大部分的操作系统组件，唯独缺少操作系统的内核。没有内核，使得GNU迟迟不能成为一个完整的操作系统。但这时，出现了一个叫做Linux的曙光。

1991年，芬兰赫尔辛基大学的Linus Torvalds开始编写一种全新的操作系统内核，也就是后来的Linux。原因仅仅是因为他使用的MINIX系统不能很好地兼容自己的80386电脑，MINIX是一种主要用于教学的操作系统，对于硬件的兼容性不是太好。其实Linus最初只是这样一个单纯的目的，但是后来他突然发现原来自己已经完成了一个操作系统的内核，而且用起来还不错。于是1991年8月25日，Linus在MINIX的新闻组里正式对外宣布自己的成果，他邀请全世界的爱好者来一同测试以及改进Linux。Linux逐渐开始流行，全世界有越来越多的参与者帮助改进Linux。1992年，GNU与Linux完美结合，成为了如今的GNU/Linux操作系统。

从刚才的那些故事可以看到，Linux、Unix这些操作系统是由一群计算机黑客所创造的，他们在创造的过程中，形成了黑客独有的文化。这就是为什么我们今天的主题是“Linux——通往黑客之路”，当你在使用这些黑客创造的产物的时候，你可以更好地领会到他们的思想。当然这并不是说使用Windows就不能成为一名黑客，只是我觉得用Linux会更加接近于黑客思维。

下面再来看一下另外一个著名的黑客，Eric Raymond。Raymond是开源软件的积极倡导者，并且著有很多具有很大影响力的文章与书籍。比如1997年的《The Cathedral and the Bazaar》，大教堂与市集，这是一篇比较传统软件开发模式与开源软件开发模式的文章。2003年的《The Art of Unix Programming》，Unix编程艺术，这是一本讲述Unix文化以及设计哲学的书。2005年，《How To Become A Hacker》，听名字就知道了，这是一篇用来指导那些想成为黑客的人的文章。

\section{Linux vs. Windows}

如果你只是一名普通的电脑用户，那我不推荐你去使用Linux，就目前来说Windows在易用性上还是高于Linux的。但是如果你想成为一名黑客，Linux会给你带来很多好处。下面让我们从开发者的角度来对比一下Linux与Windows。

首先是CLI vs. GUI。CLI也就是命令行，GUI是图形界面的意思。大多数人都习惯于排斥命令行，这就导致了Windows开发社区非常地注重图形界面。如果你在Windows下开发了一个程序，但是没有图形界面，估计你都不好意思跟人说这是一个程序，很多人会认为只有拥有了图形界面才算是一个完整的程序。无形之中，Windows弱化了命令行的功能。OK，让我们来看看Linux是怎么让命令行变得强大的吧。 \textbf{演示开始$\heartsuit$}现在就给你这样一个命令行窗口，你可以干什么？我们可以听歌。可以看电影。可以上Google。可以聊天。还可以写程序。\textbf{$\heartsuit$演示结束} 在Linux下你把命令行和图形界面结合起来一起使用的话是非常高效的，甚至你可以不用鼠标，只用键盘。使用命令行还有一个重要原因就是，这是一名黑客需要具备的基本能力。

让我们来看下一条。Clean vs. Dirty。在我看来Windows是Dirty的，因为它使用注册表来保存系统和用户的配置信息。时间久了，你电脑上的注册表会变得越来越庞大，越来越臃肿。这不仅会使你的系统变慢，也不便于查找以及修改。而Linux则采用了完全不同的设计思想，它的宗旨是：Everything is a FILE。真的是Everything，就连你电脑上的硬盘，光驱，键盘，鼠标这些在Linux看来都仅仅是系统中的一个文件。你管理配置以及其它信息也仅仅是在管理一些普通的文件，这非常便于系统的维护与更新。用Linux你会有一个感觉，这里的每一样东西你都了解，你都清楚，你不会因为它是一个系统文件就不能去触碰它，相反，你可以非常仔细地剖析它。所以，使用Linux是一件很舒适的事情。

下面一条，Crystal，水晶，vs. Black Box。对于开发者来说，Windows就像一个黑箱，你无法知晓它的内部结构，因此你的开发需要附带很多的摸索与揣测。并且Windows下的开发文档也不够深入与详细。但是Linux系统它会以一种开放的姿态来拥抱你。你想了解这个命令是干什么的，它给你提供文档，你想知道这个函数是怎么实现的，它也给你提供文档。 \textbf{演示开始$\heartsuit$}比如Linux中有一个命令叫做\texttt{ls}，我们就可以输入\texttt{man ls}来看看到底这个命令有什么功能。C语言中有一个函数叫\texttt{printf}，我们也可以看看这个函数是怎么工作的。\textbf{$\heartsuit$演示结束} 即使没有文档，我们也可以看到这个程序的源代码。如果你去询问编程高手怎样提升编程能力，他一般都会跟你说一是要自己多写代码，二就是要多看别人写的好的代码。那如果你用Windows你怎么去看代码？如果你像了解操作系统的内部原理，那该怎么办？所以说开源是一件很棒的事情。你不可能说哪天用着QQ，用着迅雷觉得不爽了就去把他们的源代码改改然后自己重新编译一次。但是由于Linux下大部分的软件都是开源的，所以你可以想怎么改就怎么改。你可以通过自己的能力打造一个完全属于自己的操作系统。

\section{简明黑客指南}

下面我们来讲一讲“简明黑客指南”。作为一名黑客，你得具备一些能力，熟悉很多工具。这里就简要介绍一些。

指南一，Linux发行版的选择。Linux发行版是指那些基于Linux内核的操作系统。现在全世界有几百种Linux发行版，既然你已经准备使用Linux了，那得知道Linux的发行版都有哪些类型，然后根据你自己的情况进行选择。首先是最简单的即安即用型，也就是你安装好系统后就基本上可以投入使用了，这种类型的Linux的典型代表有Ubuntu，Fedora，openSUSE。然后是安装后需要自己定制的，一般这种系统你安装完都只有一个简单的命令行界面，你可以根据自己的喜好来进行后面的配置，这种类型的典型代表有Arch，我们桃源小组的任柳江同学就是使用的Arch系统，待会儿完了有什么问题也可以问他。第三种类型就比较变态了，刚才那两个还好，至少系统内核都是编译好了直接提供给你的，而现在介绍的这种是一开始就必须得从编译内核开始，编译好内核之后，你还得编译其它的软件，总之就是所有的东西都必须得从源代码开始。这种系统的好处就是提供给了用户最大的自由度，坏处也很明显，很费时间，一般安装的话不花个两三天是安不下来的。这种类型的典型代表是Gentoo。最后还是那句话，只有适合你的才是最好的。像我就属于比较懒的那种，不想去太折腾，Gentoo那种就太麻烦了一点，所以我选择使用最易用的Ubuntu。

指南之二，编程语言。语言是我们与计算机交流的工具，一旦你懂得如何交流，它会帮你实现你的愿望。在Linux下，有这样一些常用的语言。C语言是最基础的语言，自从1973年Unix用C完全重写后，Unix和Linux的内核就基本上是用C语言编写的。第二个是Shell脚本，它类似于Windows的批处理，不过得益于Linux强大的命令行，它所能办到得要远远超乎你的想像。然后是Perl，它和下一个Python一样，它们都属于编程语言里的瑞士军刀，在Linux社区很是流行。最后一个叫做Lisp，它是一种适合于人工智能研究的语言，同时我们马上就要介绍的编辑器Emacs也使用了Lisp进行编写。

指南三，编辑器。恐怕你们现在还无法理解为什么在Linux社区会那么看中一个用来写代码的工具。编辑器就像侠客的剑，而编程语言就是剑法与招式，这两样紧密联系，缺一不可。在Linux下有两大编辑器，一个叫做Emacs，另一个叫做Vim。他们就像武侠中的倚天剑与屠龙刀，各有千秋，但都是绝世武器。有这样一句玩笑话，Emacs被称作“神的编辑器”，而Vim则是“编辑器之神”。当年那些黑客在创造这两样兵器的时候，灌输了很多绝妙的思想在里面。所以，我们所要做的就是使用以及领悟。 \textbf{演示开始$\heartsuit$}这就是Emacs，然后这是Vim。\textbf{$\heartsuit$演示结束}

最后来看看一些在Linux下常用的工具，这些工具不同于Windows下的软件，它们带有很强烈的黑客风格。首先是自动化编译工具\texttt{make}，它可以帮助你实现快速以及高效地编译。你可以在Java和微软的VS里找到\texttt{make}的影子。然后是版本控制，常用的有两种，Subversion，也叫SVN，和Git，其中Git是由Linus所开发的。接下来是排版工具，平常我们用得最多的肯定就是Word了，不过Word并不是一个专业的排版工具，世界上著名的学术会议、杂志、期刊都会要求你使用这里的第一个，\LaTeX，进行排版，很多大学的毕业论文也要求用\LaTeX，不过貌似我们学校还是要求用Word。\LaTeX{}建立在\TeX{}之上，而\TeX{}是由著名的计算机科学家，斯坦福大学名誉教授Knuth发明。Knuth也是一个大牛，学计算机的每个人都应该知道他，以及他的著作《The Art of Computer Programming》，计算机程序设计艺术。今天讲座所使用的幻灯片也是用\LaTeX{}进行排版的。除了\LaTeX{}之外，DocBook也被广泛使用。最后是聊天工具，国外的黑客可不用QQ，他们使用IRC与邮件列表。IRC类似于公共聊天室，每个人都可以在上面发言。 \textbf{演示开始$\heartsuit$}这是IRC的一个客户端软件。\textbf{$\heartsuit$演示结束} 邮件列表则是以电子邮件的形式进行多人交流，这是一个历史悠久的交流方式，现在一般使用Google Groups进行邮件列表通信。 \textbf{演示开始$\heartsuit$}这是我订阅的一些邮件列表。\textbf{$\heartsuit$演示结束}

\section{Linux\textsf{@}CUIT}

讲了这么多，不知道大家对于黑客，对于Linux有了多少了解。我得说，Linux，这个当年由黑客创造的产物，蕴涵了很多伟大的思想，但需要你自己去发掘，当你了解了它，你就会爱上它。现在Linux也在图形界面以及易用性上有了很大的发展，我相信，它以后会发展得越来越好。

好，最后让我们来看看Linux在我们学校的发展情况。

首先介绍下桃源。桃源最初是由任柳江同学发起，目的是推广Linux，让更多的人使用Linux。2008年7月开始发行名为《桃源》的电子杂志，内容是介绍Linux的相关知识，总共发行了3期，后来因为时间原因中止了发行。今年6月复刊，任柳江同学还特意写了一篇激情洋溢的复刊辞，大家可以在桃源网站上看到。现在桃源主要是以网站的形式发表文章，但是我们很欢迎各位都来参与。每个人都可以注册一个用户，然后发表文章，只要管理员审核通过，就可以出现在桃源的网站上。下面是桃源网站的网址和桃源的Twitter。

然后是一些Linux的开源作品。第一个是WordJoy，由任柳江同学开发，主要是用来帮助背单词。第二个是GUI H3C Client，由雷宇田开发，因为Linux下的H3C客户端没有图形界面，所以雷宇田同学做了这个图形界面的H3C。

大家加入上面的网站和QQ群，一起交流Linux。我的演讲就到这里，谢谢大家！

\end{document}